package com.example.propertymanagement.controller;


import com.example.propertymanagement.dto.AdminDTO;
import com.example.propertymanagement.entity.AdminUser;
import com.example.propertymanagement.service.AdminService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;
import java.util.Optional;

/**
 * AdminController：管理员相关的 HTTP 请求处理
 */
@RestController
@RequestMapping("/api/admins")  // 管理员相关 API 的路径
public class AdminController {

    @Autowired
    private AdminService adminService;  // 注入 AdminService 用于业务处理

    /**
     * 获取所有管理员
     * @return 管理员列表
     */
    @GetMapping
    public List<AdminDTO> getAllAdmins() {
        return adminService.getAllAdmins();  // 获取所有管理员
    }

    /**
     * 根据管理员ID获取管理员
     * @param id 管理员ID
     * @return 管理员信息
     */
    @GetMapping("/{id}")
    public Optional<AdminDTO> getAdminById(@PathVariable Integer id) {
        return adminService.getAdminById(id);  // 根据ID查询管理员
    }

    /**
     * 根据管理员用户名获取管理员
     * @param username 管理员用户名
     * @return 管理员信息
     */
    @GetMapping("/username/{username}")
    public Optional<AdminDTO> getAdminByUsername(@PathVariable String username) {
        return adminService.getAdminByUsername(username);  // 根据用户名查询管理员
    }

    /**
     * 创建管理员
     * @param adminUser 管理员对象
     * @return 创建后的管理员对象
     */
    @PostMapping
    public AdminUser createAdmin(@RequestBody AdminUser adminUser) {
        return adminService.createAdmin(adminUser);  // 创建管理员
    }

    /**
     * 更新管理员信息
     * @param id 管理员ID
     * @param adminUser 更新后的管理员信息
     * @return 更新后的管理员对象
     */
    @PutMapping("/{id}")
    public AdminUser updateAdmin(@PathVariable Integer id, @RequestBody AdminUser adminUser) {
        adminUser.setId(id);  // 设置管理员的ID
        return adminService.updateAdmin(adminUser);  // 更新管理员信息
    }

    /**
     * 删除管理员
     * @param id 管理员ID
     */
    @DeleteMapping("/{id}")
    public void deleteAdmin(@PathVariable Integer id) {
        adminService.deleteAdmin(id);  // 删除管理员
    }
}